home *** CD-ROM | disk | FTP | other *** search
- /********************************************************************************/
- /* */
- /* read.c - read request processing. */
- /* */
- /* Richard W. Mincher. February 19, 1990. */
- /* */
- /* Copyright © 1990 Apple Computer, Inc. All rights reserved. */
- /* */
- /********************************************************************************/
-
- #include "AROSE.h"
- #include "os.h"
- #include "managers.h"
-
- #include "ARDriver.h"
- #include "ARTask.h"
-
- ReadCall()
- {
- #ifdef DEBUG
- printf("Read received. mDataPtr = %x, mDataSize = %x\n",
- msg->mDataPtr, msg->mDataSize );
- #endif DEBUG
-
- G->readCmd = 1;
-
- msg->mNext = 0;
- msg->mOData[0] = msg->mDataSize;
- msg->mOData[1] = (unsigned long)(msg->mDataPtr);
-
- if (G->rxQHead)
- {
- G->rxQTail->mNext = msg;
- G->rxQTail = msg;
- return;
- }
-
- G->rxQHead = msg;
- G->rxQTail = msg;
- TickleRead();
- }
-
- TickleRead()
- {
- short s;
- message *m;
- tid_type temp;
- short count;
-
- while (G->rxQHead)
- {
- count = G->rxMax - G->rxCount;
- if (!count)
- break;
- if (count > G->rxQHead->mOData[0])
- count = G->rxQHead->mOData[0];
-
- if (count > (G->rxLast - G->rxOut))
- {
- NetCopy( G->rxQHead->mTo, G->rxOut,
- G->rxQHead->mFrom, (char *)(G->rxQHead->mOData[1]),
- G->rxLast - G->rxOut );
- count -= G->rxLast - G->rxOut;
- s = Spl(7);
- G->rxCount += G->rxLast - G->rxOut;
- G->sRxCount -= G->rxLast - G->rxOut;
- (void)Spl(s);
- G->rxQHead->mOData[0] -= G->rxLast - G->rxOut;
- G->rxQHead->mOData[1] += G->rxLast - G->rxOut;
- G->rxOut = G->rxFirst;
- }
-
- NetCopy( G->rxQHead->mTo, G->rxOut,
- G->rxQHead->mFrom, (char *)(G->rxQHead->mOData[1]),
- count);
- s = Spl(7);
- G->rxCount += count;
- G->sRxCount -= count;
- (void)Spl(s);
- G->rxOut += count;
- if (G->rxOut == G->rxLast)
- G->rxOut = G->rxFirst;
- G->rxQHead->mOData[0] -= count;
- G->rxQHead->mOData[1] += count;
-
- if (G->rxQHead->mOData[0] == 0)
- {
- m = G->rxQHead;
- G->rxQHead = G->rxQHead->mNext;
- temp = m->mTo;
- m->mTo = m->mFrom;
- m->mFrom = temp;
- m->mCode |= 1;
- Send( m );
- }
- }
-
- s = Spl(7);
- count = G->rxMax - G->rxCount;
- G->rxTickle = TICKLESIZE;
- if (G->rxQHead)
- {
- if (G->rxQHead->mOData[0] < TICKLESIZE)
- G->rxTickle = G->rxQHead->mOData[0] - count;
- }
- else
- G->readCmd = 0;
- (void)Spl(s);
-
- if (G->rxCount > RXSTART)
- {
- if (G->inSwHs && !(G->flowOff & 0x80))
- {
- }
- if (G->inHwHs && !(G->flowOff & 0x40))
- {
- AssertDTR();
- }
- }
-
- if (G->rxCount < RXSTOP)
- {
- if (G->inSwHs && (G->flowOff & 0x80))
- {
- }
- if (G->inHwHs && (G->flowOff & 0x40))
- {
- NegateDTR();
- }
- }
- }
-